package com.sojson.entity.po;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.sojson.base.impl.BaseDto;
import com.sojson.enums.core.EDelFlagStatus;
import com.sojson.enums.core.EGeneralStatus;
import com.sojson.util.DateUtil;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * 角色信息表Bean
 * 
 * @author liu
 * @date 2021-04-13
 */
@ApiModel("角色信息表Bean")
public class Role extends BaseDto {

    /**
     * 此文件由工具自动生成，手动添加内容请放至末尾
     */

    private static final long serialVersionUID = 1618305378048L;

    @ApiModelProperty("角色名称")
    private String name;
    @ApiModelProperty("角色权限字符串")
    private String key;
    @ApiModelProperty("显示顺序")
    private Integer sortNum;
    @ApiModelProperty("数据范围（1：全部数据权限 2：自定数据权限）")
    private Integer dataScope;
    @ApiModelProperty("菜单树选择项是否关联显示(1:是,2:否)")
    private Integer menuCheckStrictly;
    @ApiModelProperty("部门树选择项是否关联显示(1:是,2:否)")
    private Integer deptCheckStrictly;
    @ApiModelProperty("角色状态（1正常 2停用）")
    private Integer status;
    @ApiModelProperty("删除标志（1代表存在 2代表删除）")
    private Integer delFlag;
    @ApiModelProperty("创建时间")
    private Date createAt;
    @ApiModelProperty("更新时间")
    private Date updateAt;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("菜单ID数组")
    private Integer[] menuIds;
    @ApiModelProperty("角色权限字符串集合")
    private List<String> keys;
    @ApiModelProperty("角色权限字符串集合")
    private String keysStr;
    /** 角色主键集合 */
    private ArrayList<Integer> ids;
    /** 角色信息表集合 */
    private ArrayList<Role> roles;

    /**
     * 以上由工具自动生成，以下为手动添加
     */

       /**
        * Empty constructor
        */
    public Role() {

    }

    public Role(Integer id) {
        setId(id);
    }

    /**
     * 此文件由工具自动生成，手动添加内容请放至末尾
     */

    /**
     * 获取 角色名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置 角色名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取 角色权限字符串
     */
    public String getKey() {
        return key;
    }

    /**
     * 设置 角色权限字符串
     */
    public void setKey(String key) {
        this.key = key;
    }

    /**
     * 获取 显示顺序
     */
    public Integer getSortNum() {
        return sortNum;
    }

    /**
     * 设置 显示顺序
     */
    public void setSortNum(Integer sortNum) {
        this.sortNum = sortNum;
    }

    /**
     * 获取 数据范围（1：全部数据权限 2：自定数据权限）
     */
    public Integer getDataScope() {
        return dataScope;
    }

    /**
     * 设置 数据范围（1：全部数据权限 2：自定数据权限）
     */
    public void setDataScope(Integer dataScope) {
        this.dataScope = dataScope;
    }

    /**
     * 获取 菜单树选择项是否关联显示
     */
    public Integer getMenuCheckStrictly() {
        return menuCheckStrictly;
    }

    /**
     * 设置 菜单树选择项是否关联显示
     */
    public void setMenuCheckStrictly(Integer menuCheckStrictly) {
        this.menuCheckStrictly = menuCheckStrictly;
    }

    /**
     * 获取 部门树选择项是否关联显示
     */
    public Integer getDeptCheckStrictly() {
        return deptCheckStrictly;
    }

    /**
     * 设置 部门树选择项是否关联显示
     */
    public void setDeptCheckStrictly(Integer deptCheckStrictly) {
        this.deptCheckStrictly = deptCheckStrictly;
    }

    /**
     * 获取 角色状态（1正常 2停用）
     */
    public Integer getStatus() {
        return status;
    }

    /**
     * 设置 角色状态（1正常 2停用）
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    /**
     * 获取 删除标志（1代表存在 2代表删除）
     */
    public Integer getDelFlag() {
        return delFlag;
    }

    /**
     * 设置 删除标志（1代表存在 2代表删除）
     */
    public void setDelFlag(Integer delFlag) {
        this.delFlag = delFlag;
    }

    /**
     * 获取 创建时间
     */
    public Date getCreateAt() {
        return createAt;
    }

    /**
     * 设置 创建时间
     */
    public void setCreateAt(Date createAt) {
        this.createAt = createAt;
    }

    /**
     * 获取 更新时间
     */
    public Date getUpdateAt() {
        return updateAt;
    }

    /**
     * 设置 更新时间
     */
    public void setUpdateAt(Date updateAt) {
        this.updateAt = updateAt;
    }

    /**
     * 获取 备注
     */
    @Override
    public String getRemark() {
        return remark;
    }

    /**
     * 设置 备注
     */
    @Override
    public void setRemark(String remark) {
        this.remark = remark;
    }

    /**
     * 获取 角色主键集合
     */
    public ArrayList<Integer> getIds() {
        return ids;
    }

    /**
     * 设置 角色主键集合
     */
    public void setIds(ArrayList<Integer> ids) {
        this.ids = ids;
    }

    /**
     * 获取 角色信息表集合
     */
    public ArrayList<Role> getRoles() {
        return roles;
    }

    /**
     * 设置 角色信息表集合
     */
    public void setRoles(ArrayList<Role> roles) {
        this.roles = roles;
    }

    /**
     * 以上由工具自动生成，以下为手动添加
     */

    /**
     * 获取菜单组
     * 
     * @return
     */
    public Integer[] getMenuIds() {
        return menuIds;
    }

    /**
     * 设置菜单组
     * 
     * @param menuIds
     */
    public void setMenuIds(Integer[] menuIds) {
        this.menuIds = menuIds;
    }

    /**
     * 获取角色权限字符串集合
     * 
     * @return
     */
    public List<String> getKeys() {
        return keys;
    }

    /**
     * 设置角色权限字符串集合
     * 
     * @param keys
     */
    public void setKeys(List<String> keys) {
        this.keys = keys;
    }

    /**
     * 获取角色权限字符串集合
     * 
     * @return
     */
    public String getKeysStr() {
        return keysStr;
    }

    /**
     * 设置角色权限字符串集合
     * 
     * @param keysStr
     */
    public void setKeysStr(String keysStr) {
        this.keysStr = keysStr;
    }

    /**
     * 插入初始化
     */
    public void insertInit() {
        setStatus(EGeneralStatus.NORMAL.getCode());
        setDelFlag(EDelFlagStatus.NO.getCode());
        Date now = DateUtil.nowDate();
        setCreateAt(now);
        setUpdateAt(now);
    }

    /**
     * 更新初始化
     */
    public void updateInit() {
        Date now = DateUtil.nowDate();
        setUpdateAt(now);
    }

    /**
     * 更新初始化
     */
    public void setUpdateNull() {
        setStatus(null);
        setKey(null);
    }

    public boolean isAdmin() {
        return isAdmin(getId());
    }

    public static boolean isAdmin(Integer id) {
        return id != null && 1L == id;
    }

}